home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1980-01-01 | 24.3 KB | 719 lines |
- 100 '**********************************************************************
- 110 '** GRAPH MASTER **
- 120 '** CREATES GRAPHS FOR DISPLAY **
- 130 '** **
- 140 '** VERSION 1.1 JULY 14, 1982 **
- 150 '** **
- 160 '**********************************************************************
- 170 '
- 180 SCREEN 2 : KEY OFF : OPTION BASE 1 : GOSUB 500
- 190 '
- 200 '**********************************************************************
- 210 '** THIS SECTION PRINTS THE MENU FOR THE SELECTIONS **
- 220 '**********************************************************************
- 230 '
- 240 SCREEN 0 : WIDTH 80 : CLS
- 250 LOCATE 2,24 : PRINT "****************"
- 260 LOCATE 3,24 : PRINT "* GRAPH MASTER *"
- 270 LOCATE 4,24 : PRINT "****************"
- 280 LOCATE 7,20 : PRINT "1 = Labels For Graph
- 290 LOCATE 8,20 : PRINT "2 = Input Data From Cassette Or Disk
- 300 LOCATE 9,20 : PRINT "3 = Output Data To Cassette Or Disk
- 310 LOCATE 10,20 : PRINT "4 = Enter Data Values And Labels
- 320 LOCATE 11,20 : PRINT "5 = Generate Graphs
- 330 LOCATE 17,1 : PRINT "ENTER SELECTION AT DASH (1 THRU 5 ONLY)
- 340 LOCATE 18,1 : PRINT "USE THE ";CHR$(27);" (BACKSPACE) KEY TO BACKSPACE
- 350 ROW = 18 : COLUMN = 50 : LENGTH = 1
- 360 GOSUB 30000
- 370 IF (B$>CHR$(48)) AND (B$<CHR$(54)) THEN B = ASC(B$) - 48 : GOTO 420
- 380 COLOR 23 : LOCATE 14,1 : PRINT "ERROR IN INPUT - PLEASE SELECT AGAIN
- 390 FOR X = 1 TO 2000 : NEXT
- 400 COLOR 7 : LOCATE 14,1 : PRINT " "
- 410 GOTO 350
- 420 ON B GOTO 1000,2000,3000,4000,6000
- 500 '
- 510 '**********************************************************************
- 520 '** THIS SECTION INITIALIZES THE VARIABLES IN A SUBROUTINE **
- 530 '**********************************************************************
- 540 '
- 550 DEFSTR A : DIM A(100),DATAVAL(200),DATALABEL$(36)
- 560 MAXCOUNT = 20 : PRINTLABELS = 1 : DATAPOINTS = 12
- 570 ATITLE1 = "" : ATITLE2 = "" : ATITLE3 = "" : ATITLE4 = ""
- 580 RETURN
- 1000 '
- 1010 '**********************************************************************
- 1020 '** This Section Allows You To Enter The Labels For The Graph **
- 1030 '**********************************************************************
- 1040 '
- 1050 CLS
- 1060 PRINT "This Section Sets Up The Labels For The Graph
- 1070 PRINT "---------------------------------------------
- 1080 LOCATE 4,1
- 1090 PRINT "If You Would Like To Keep The Present Label, Simply Press <Return>
- 1100 PRINT "Else, Enter The New Label On The Dashes --------
- 1110 '
- 1120 LOCATE 7,1
- 1130 PRINT "The First Line Of The Title Is - ";
- 1140 PRINT ATITLE1
- 1150 ROW = 9 : COLUMN = 1 : LENGTH = 40 : GOSUB 30010
- 1160 IF B$ = "" THEN 1180
- 1170 ATITLE1 = B$
- 1180 '
- 1190 LOCATE 11,1
- 1200 PRINT "The Second Line Of The Title Is - ";
- 1210 PRINT ATITLE2
- 1220 ROW = 13 : COLUMN = 1 : LENGTH = 40 : GOSUB 30010
- 1230 IF B$ = "" THEN 1250
- 1240 ATITLE2 = B$
- 1250 '
- 1260 LOCATE 16,1
- 1270 PRINT "The Label For The Data Catagories Is - ";
- 1280 PRINT ATITLE3
- 1290 ROW = 18 : COLUMN = 1 : LENGTH = 40 : GOSUB 30010
- 1300 IF B$ = "" THEN 1320
- 1310 ATITLE3 = B$
- 1320 '
- 1330 LOCATE 21,1
- 1340 PRINT "The Label For The Data Values Is - ";
- 1350 PRINT ATITLE4
- 1360 ROW = 23 : COLUMN = 1 : LENGTH = 40 : GOSUB 30010
- 1370 IF B$ = "" THEN 1390
- 1380 ATITLE4 = B$
- 1390 '
- 1400 GOTO 240 ' RETURN TO MENU
- 2000 '
- 2010 '**********************************************************************
- 2020 '** This Section Reads Data Input From Cassette Or Disk **
- 2030 '**********************************************************************
- 2040 '
- 2050 CLS : SCREEN 2
- 2060 INPUT "ENTER FILENAME INCLUDING EXTENSIONS " ; FILEDATA$ : CLS
- 2070 OPEN FILEDATA$ FOR INPUT AS #1
- 2080 INPUT#1,ATITLE1,ATITLE2
- 2090 INPUT#1,ATITLE3,ATITLE4
- 2100 INPUT#1,DATAPOINTS,GRAPHTYPE,PRINTLABELS,MAXVAL,MINVAL,LABELLENGTH
- 2110 FOR X = 1 TO DATAPOINTS
- 2120 INPUT#1,DATAVAL(X)
- 2130 IF PRINTLABELS = 1 THEN 2140 ELSE 2150
- 2140 INPUT#1,DATALABEL$(X)
- 2150 NEXT X : CLOSE
- 2160 '
- 2170 ON GRAPHTYPE GOSUB 8070,9070,10070,12070
- 2180 '
- 2190 CLS
- 2200 PRINT "PRESS 1 FOR MENU"
- 2210 PRINT "PRESS 2 FOR NEXT GRAPH"
- 2220 A$ = INKEY$ : IF A$ = "" THEN 2220
- 2230 IF VAL(A$) = 1 THEN GOTO 240
- 2240 IF VAL(A$) = 2 THEN GOTO 2050
- 2250 GOTO 2180
- 3000 '
- 3010 '**********************************************************************
- 3020 '** This Section Writes Data Out To Cassette Or Disk **
- 3030 '**********************************************************************
- 3040 '
- 3050 CLS : SCREEN 2
- 3060 INPUT "ENTER FILENAME INCLUDING EXTENSIONS " ; FILEDATA$
- 3070 OPEN FILEDATA$ FOR OUTPUT AS #1
- 3080 PRINT#1,CHR$(34);ATITLE1;CHR$(34);CHR$(34);ATITLE2;CHR$(34)
- 3090 PRINT#1,CHR$(34);ATITLE3;CHR$(34);CHR$(34);ATITLE4;CHR$(34)
- 3100 PRINT#1,DATAPOINTS;GRAPHTYPE;PRINTLABELS,MAXVAL,MINVAL,LABELLENGTH
- 3110 FOR X = 1 TO DATAPOINTS
- 3120 PRINT#1,DATAVAL(X)
- 3130 IF PRINTLABELS = 1 THEN 3140 ELSE 3150
- 3140 PRINT#1,CHR$(34);DATALABEL$(X);CHR$(34)
- 3150 NEXT X
- 3160 '
- 3170 LOCATE 25,1 : INPUT "PRESS ENTER TO RETURN TO MENU -";A$
- 3180 CLOSE : GOTO 240
- 4000 '
- 4010 '**********************************************************************
- 4020 '** This Section Gets The Data For The Graph **
- 4030 '**********************************************************************
- 4040 '
- 4050 CLS
- 4060 LOCATE 1,25 : PRINT "Data Entry
- 4070 LOCATE 2,25 : PRINT "---- -----
- 4080 LOCATE 5,1
- 4090 PRINT "Here We Will Enter The Data And Their Corresponding Labels
- 4100 PRINT
- 4110 PRINT "If You Would Like To Keep The Present Values, Simply Press <Return>
- 4120 PRINT "Else, Enter The New Values On The Dashes --------
- 4130 LOCATE 10,1
- 4140 PRINT "Would You Like To Have Labels For The Data Entries ?
- 4150 PRINT "For Example - (1981 or Hogs) etc.
- 4160 PRINT "Presently You Are Set Up For ";
- 4170 IF PRINTLABELS = 1 THEN PRINT "USING Labels" ELSE PRINT "NOT USING Labels
- 4180 LOCATE 14,1 : PRINT "Yes = 1
- 4190 LOCATE 15,1 : PRINT "No = 2
- 4200 ROW = 15 : COLUMN = 10 : LENGTH = 1 : GOSUB 30010
- 4210 IF B$ = "" THEN 4230
- 4220 IF (ASC(B$)-48) = 1 THEN PRINTLABELS = 1 ELSE PRINTLABELS = 2
- 4230 LOCATE 17,1
- 4240 PRINT "Please Enter The Number Of Data Points To Be Graphed
- 4250 PRINT "This Number May Be From 1-35 If You Are Using Labels Or
- 4260 PRINT " From 1-200 If You Are Not.
- 4270 PRINT "Presently You Are Set Up For ";DATAPOINTS;" Data Points.
- 4280 PRINT ">>>>>>>"
- 4290 ROW = 21 : COLUMN = 10 : LENGTH = 3 : GOSUB 30010
- 4300 IF B$ = "" THEN 4410
- 4310 B = VAL(B$) : IF B < 1 THEN B = 500
- 4320 IF (PRINTLABELS = 1) AND (B > 35) THEN 4330 ELSE 4360
- 4330 LOCATE 23,1 : PRINT "FROM 1 TO 35 WHEN USING LABELS (ONLY) "
- 4340 FOR X = 1 TO 1000 : NEXT X
- 4350 LOCATE 23,1 : PRINT " ":GOTO 4230
- 4360 IF (PRINTLABELS = 2) AND (B > 200) THEN 4370 ELSE 4400
- 4370 LOCATE 23,1 : PRINT "FROM 1 TO 200 WITHOUT LABELS (ONLY) "
- 4380 FOR X = 1 TO 1000 : NEXT X
- 4390 LOCATE 23,1 : PRINT " ":GOTO 4230
- 4400 DATAPOINTS = B : GOTO 4420
- 4410 IF (PRINTLABELS = 1) AND (DATAPOINTS > 35) THEN 4330
- 4420 LOCATE 25,1
- 4430 PRINT "Press Enter To Continue ";:INPUT A$
- 4440 '
- 4450 CLS
- 4460 PRINT "Enter The Value Of The Data - <Or>
- 4470 PRINT
- 4480 PRINT "Enter The Word <END> If This Is The Last Data
- 4490 PRINT " And You Would Like To Return To The Menu - <Or>
- 4500 PRINT
- 4510 PRINT "Enter The Word <EDIT> If You Would Like To Change
- 4520 PRINT " Some Data Values (Allows You To Skip Around) - <Or>
- 4530 PRINT
- 4540 PRINT "If You Would Like To Keep The Present Values, Simply Press <Return>
- 4550 LOCATE 17,1
- 4560 PRINT "Next -
- 4570 PRINT
- 4580 PRINT "Enter The Label For This Data Element - <Or>
- 4590 PRINT
- 4600 PRINT "If You Would Like To Keep The Present Labels, Simply Press <Return>
- 4610 PRINT
- 4620 LOCATE 25,1 : PRINT "PRESS ENTER TO CONTINUE - ";:INPUT A$
- 4630 '
- 4640 CLS
- 4650 LOCATE 25,1 : PRINT "Number Data ";
- 4660 LOCATE 25,21 : IF PRINTLABELS = 1 THEN PRINT "Label ";
- 4670 LOCATE 25,40 : PRINT "<END> or <EDIT> on data entry";
- 4680 '
- 4690 COUNT = 1
- 4700 LABELLENGTH = FIX(65/DATAPOINTS )-1
- 4710 IF LABELLENGTH > 7 THEN LABELLENGTH = 7
- 4720 IF (LABELLENGTH < 1) AND (DATAPOINTS < 35) THEN LABELLENGTH = 1
- 4730 LOCATE 22,1 : PRINT USING "###";COUNT
- 4740 '
- 4750 ROW = 22 : COLUMN = 11 : LENGTH = 4 : GOSUB 30000
- 4760 IF B$ = "END" THEN 240
- 4770 IF B$ = "EDIT" THEN 4810
- 4780 IF B$ = "" THEN 4880
- 4790 GOTO 4850
- 4800 '
- 4810 LOCATE 22,1 : PRINT " ";
- 4820 LOCATE 22,1 : INPUT "Edit Which Number - "; COUNT
- 4825 LOCATE 22,1 : PRINT " ";
- 4830 GOTO 4730
- 4840 '
- 4850 B = VAL(B$) : IF B < 0 THEN B = 0
- 4860 DATAVAL(COUNT) = B
- 4870 '
- 4880 LOCATE 22,11 : PRINT USING "####.##";DATAVAL(COUNT);
- 4890 '
- 4900 IF PRINTLABELS = 2 THEN 4980
- 4905 IF LABELLENGTH < 1 THEN 4980
- 4910 ROW = 22 : COLUMN = 21 : LENGTH = LABELLENGTH : GOSUB 30000
- 4920 IF B$ = "" THEN 4950
- 4930 DATALABEL$(COUNT) = B$
- 4940 '
- 4950 LOCATE 22,21 : PRINT " ";
- 4960 LOCATE 22,21 : PRINT DATALABEL$(COUNT);
- 4970 '
- 4980 PRINT : PRINT : PRINT
- 4990 IF COUNT < DATAPOINTS THEN COUNT = COUNT + 1 : GOTO 4730
- 5000 '
- 5010 LOCATE 25,1 : PRINT " ";
- 5015 LOCATE 25,40 : PRINT " ";
- 5020 LOCATE 25,1 : INPUT "Press Enter To Continue ";A$ : GOTO 240
- 6000 '
- 6010 '**********************************************************************
- 6020 '** This Section Generates The Graphs **
- 6030 '**********************************************************************
- 6040 '
- 6050 SCREEN 2 : WIDTH 80 : CLS
- 6060 LOCATE 2,24 : PRINT "*******************"
- 6070 LOCATE 3,24 : PRINT "* GRAPH GENERATOR *"
- 6080 LOCATE 4,24 : PRINT "*******************"
- 6090 LOCATE 7,20 : PRINT "1 = Return To Main Menu (Save,Change,etc) Graphs
- 6100 LOCATE 8,20 : PRINT
- 6110 LOCATE 9,20 : PRINT "2 = Line Graph
- 6120 LOCATE 10,20 : PRINT "3 = Bar Graph
- 6130 LOCATE 11,20 : PRINT "4 = Horizontal Bar Graph (Max 20 Data Points)
- 6140 LOCATE 12,20 : PRINT "5 = Circle Graph
- 6150 LOCATE 17,1 : PRINT "ENTER SELECTION AT DASH (1 THRU 5 ONLY)
- 6160 LOCATE 18,1 : PRINT "USE THE ";CHR$(27);" (BACKSPACE) KEY TO BACKSPACE
- 6170 ROW = 18 : COLUMN = 50 : LENGTH = 1
- 6180 GOSUB 30000
- 6190 IF (B$>CHR$(48)) AND (B$<CHR$(54)) THEN B = ASC(B$) - 48 : GOTO 6240
- 6200 LOCATE 14,1 : PRINT "ERROR IN INPUT - PLEASE SELECT AGAIN
- 6210 FOR X = 1 TO 2000 : NEXT
- 6220 LOCATE 14,1 : PRINT " "
- 6230 GOTO 6170
- 6240 IF B = 1 GOTO 240
- 6250 ON B GOSUB 240,8000,9000,10000,12000
- 6260 GOTO 6000
- 7000 '
- 7010 '**********************************************************************
- 7020 '** This Section Gets Minimum And Maximum Values For The Scales **
- 7030 '**********************************************************************
- 7040 '
- 7050 KEY OFF : SCREEN 2 : CLS
- 7060 '
- 7070 '** GET MAX AND MIN VALUES OF INPUT ***********************************
- 7080 MAXVAL = DATAVAL(1) : MINVAL = DATAVAL(1)
- 7090 FOR X = 1 TO DATAPOINTS
- 7100 IF (DATAVAL(X) > MAXVAL) THEN MAXVAL = DATAVAL(X)
- 7110 IF (DATAVAL(X) < MINVAL) THEN MINVAL = DATAVAL(X)
- 7120 NEXT X
- 7130 '
- 7140 '** CALCULATE A MAX VALUE FOR THE GRAPH LABEL : SET MIN = 0 ***********
- 7150 '
- 7160 IF MAXVAL < 10000 THEN MAX = 10000
- 7170 IF MAXVAL < 8000 THEN MAX = 8000
- 7180 IF MAXVAL < 6000 THEN MAX = 6000
- 7190 IF MAXVAL < 4000 THEN MAX = 4000
- 7200 IF MAXVAL < 2000 THEN MAX = 2000
- 7210 IF MAXVAL < 1000 THEN MAX = 1000
- 7220 IF MAXVAL < 800 THEN MAX = 800
- 7230 IF MAXVAL < 600 THEN MAX = 600
- 7240 IF MAXVAL < 400 THEN MAX = 400
- 7250 IF MAXVAL < 200 THEN MAX = 200
- 7260 IF MAXVAL < 100 THEN MAX = 100
- 7270 IF MAXVAL < 80 THEN MAX = 80
- 7280 IF MAXVAL < 60 THEN MAX = 60
- 7290 IF MAXVAL < 40 THEN MAX = 40
- 7300 IF MAXVAL < 20 THEN MAX = 20
- 7310 IF MAXVAL < 10 THEN MAX = 10
- 7320 IF MAXVAL < 8 THEN MAX = 8
- 7330 IF MAXVAL < 6 THEN MAX = 6
- 7340 IF MAXVAL < 4 THEN MAX = 4
- 7350 IF MAXVAL < 2 THEN MAX = 2
- 7360 IF MAXVAL < 1 THEN MAX = 1
- 7370 MIN = 0
- 7380 '
- 7390 '** GET MAX AND MIN VALUES FOR GRAPH LABEL ****************************
- 7400 '
- 7410 PRINT "The Largest Entered Data Value Was - ";MAXVAL
- 7420 PRINT "The Smallest Entered Data Value Was - ";MINVAL
- 7430 PRINT
- 7440 PRINT "The Calculated Values For The Maximum And Minimum Graph Scales
- 7450 PRINT "To Give The Finished Graph A Balanced Look Is -
- 7460 PRINT
- 7470 PRINT "Maximum Graph Value = ";MAX
- 7480 PRINT "Minimum Graph Value = ";MIN
- 7490 PRINT
- 7500 PRINT "Enter The Maximum Value For The Graph Scales <Or>
- 7510 PRINT "Press Enter For The Computed Value >>>";
- 7520 ROW = 11 : COLUMN = 40 : LENGTH = 5 : GOSUB 30000
- 7530 IF B$ = "" THEN MAXVAL = MAX : GOTO 7560
- 7540 B = VAL(B$) : IF B > MAXVAL THEN MAXVAL = B
- 7550 '
- 7560 LOCATE 11,40 : PRINT " "
- 7570 LOCATE 11,40 : PRINT USING "#####";MAXVAL
- 7580 '
- 7590 LOCATE 15,1
- 7600 PRINT "Enter The Minimum Value For The Graph Scales <Or>
- 7610 PRINT "Press Enter For The Computed Value >>>"
- 7620 ROW = 16 : COLUMN = 40 : LENGTH = 5 : GOSUB 30000
- 7630 IF B$ = "" THEN MINVAL = MIN : GOTO 7660
- 7640 B = VAL(B$) : IF B < MINVAL THEN MINVAL = B
- 7650 IF MINVAL < 0 THEN MINVAL = 0
- 7660 LOCATE 16,40 : PRINT " "
- 7670 LOCATE 16,40 : PRINT USING "#####";MINVAL
- 7680 '
- 7690 LOCATE 25,1 : PRINT "Press Enter To Continue -";
- 7700 INPUT A$ : CLS :RETURN
- 7710 '
- 8000 '
- 8010 '**********************************************************************
- 8020 '** This Section Draws A Line Graph **
- 8030 '**********************************************************************
- 8040 '
- 8050 KEY OFF : SCREEN 2 : CLS : GRAPHTYPE = 1
- 8060 GOSUB 7000
- 8070 GOSUB 15000
- 8080 '
- 8090 LINE (63,175)-(63,175)
- 8100 SCALEFACTOR = (MAXVAL-MINVAL)/160
- 8110 OLDX = 67 : OLDY = 175
- 8120 '
- 8130 LABELDISTANCE = LABELLENGTH + 1
- 8140 PLOTDISTANCE = LABELDISTANCE * 8
- 8150 IF DATAPOINTS > 35 THEN PLOTDISTANCE = 575 \ DATAPOINTS
- 8160 FOR PLOTPOINTS = 1 TO DATAPOINTS
- 8170 NEWX = OLDX + PLOTDISTANCE
- 8180 NEWY = 175 - (DATAVAL(PLOTPOINTS)-MINVAL)/SCALEFACTOR
- 8190 LINE (OLDX,OLDY)-(NEWX,NEWY)
- 8200 FOR Y = NEWY TO 175 STEP 3 : PSET (NEWX,Y) : NEXT Y
- 8210 OLDX = NEWX : OLDY = NEWY
- 8220 IF PRINTLABELS = 2 THEN 8260
- 8230 LABELPOSITION = 9+(LABELDISTANCE*PLOTPOINTS)-LEN(DATALABEL$(PLOTPOINTS))/2
- 8240 LOCATE 23,LABELPOSITION
- 8250 PRINT DATALABEL$(PLOTPOINTS);
- 8260 NEXT PLOTPOINTS
- 8270 LOCATE 25,1 : INPUT A$ : RETURN
- 9000 '
- 9010 '**********************************************************************
- 9020 '** This Section Draws A Bar Graph **
- 9030 '**********************************************************************
- 9040 '
- 9050 KEY OFF : SCREEN 2 : CLS : GRAPHTYPE = 2
- 9060 GOSUB 7000
- 9070 GOSUB 15000
- 9080 '
- 9090 SCALEFACTOR = (MAXVAL-MINVAL)/160
- 9100 OLDX = 67 : OLDY = 175
- 9110 '
- 9120 LABELDISTANCE = LABELLENGTH + 1
- 9130 PLOTDISTANCE = LABELDISTANCE * 8
- 9140 IF DATAPOINTS > 35 THEN PLOTDISTANCE = 575 \ DATAPOINTS
- 9150 FOR PLOTPOINTS = 1 TO DATAPOINTS
- 9160 NEWX = OLDX + PLOTDISTANCE
- 9170 NEWY = 175 - (DATAVAL(PLOTPOINTS)-MINVAL)/SCALEFACTOR
- 9180 FOR X = -(PLOTDISTANCE/4) TO (PLOTDISTANCE/4)
- 9190 LINE (NEWX-X,NEWY)-(NEWX-X,175)
- 9200 NEXT X
- 9210 OLDX = NEWX : OLDY = NEWY
- 9220 IF PRINTLABELS = 2 THEN 9260
- 9230 LABELPOSITION = 9+(LABELDISTANCE*PLOTPOINTS)-LEN(DATALABEL$(PLOTPOINTS))/2
- 9240 LOCATE 23,LABELPOSITION
- 9250 PRINT DATALABEL$(PLOTPOINTS);
- 9260 NEXT PLOTPOINTS
- 9270 LOCATE 25,1 : INPUT A$ : RETURN
- 10000 '
- 10010 '**********************************************************************
- 10020 '** This Section Draws A Horizontal Bar Graph (20 Bars Maximun) **
- 10030 '**********************************************************************
- 10040 '
- 10050 KEY OFF : SCREEN 2 : CLS : GRAPHTYPE = 3
- 10060 GOSUB 7000
- 10070 '
- 10080 '
- 10090 LINE (72,0)-(72,185) : LINE (48,175)-(636,175)
- 10100 LOCATE 1,25+(40-LEN(ATITLE1))/2 : PRINT ATITLE1;
- 10110 LOCATE 2,25+(40-LEN(ATITLE2))/2 : PRINT ATITLE2;
- 10120 LOCATE 25,25+(40-LEN(ATITLE4))/2 : PRINT ATITLE4;
- 10130 '
- 10140 '** FOR THE VERTICAL AXIS, CENTER THE LABEL WITHIN 18 CHAR OF BLANKS
- 10150 A$ = "" : L = LEN(ATITLE3) : L1 = (18-L)/2
- 10160 FOR X = 1 TO L1 : A$ = A$ + " " : NEXT X
- 10170 A$ = A$ + ATITLE3
- 10180 FOR X = LEN(A$) TO 18 : A$ = A$ + " " : NEXT X
- 10190 '
- 10200 '** NOW PRINT THE LABEL ON THE LEFT OF THE SCREEN
- 10210 FOR X = 3 TO 20
- 10220 LOCATE X,1 : PRINT MID$(A$,X-2,1);
- 10230 NEXT X
- 10240 '
- 10250 SCALEFACTOR = (MAXVAL - MINVAL) / 564
- 10260 '
- 10270 '** DRAW OUT THE BARS (SPACED PROPERLY OF COURSE)
- 10280 GOSUB 10770
- 10290 '
- 10300 LINE (213,175)-(213,185) : LINE (354,175)-(354,185)
- 10310 LINE (495,175)-(495,185) : LINE (638,175)-(638,185)
- 10320 '
- 10330 '** CALCULATE OUT HOW TO PRINT THE VERTICAL SCALE AND PRINT IT
- 10340 '**
- 10350 '** IF MAXVAL >= 10000 THEN PRINT AS XXXXX
- 10360 '** IF 1000 >= MAXVAL > 10000 THEN PRINT AS XXXX
- 10370 '** IF 100 >= MAXVAL > 1000 THEN PRINT AS XXX.X
- 10380 '** IF 10 >= MAXVAL > 100 THEN PRINT AS XX.XX
- 10390 '** IF 1 >= MAXVAL > 10 THEN PRINT AS X.XXX
- 10400 '** IF 0 >= MAXVAL > 1 THEN PRINT AS 0.XXX
- 10410 '**
- 10420 MAX = 2 + LOG(MAXVAL)/LOG(10) ' LOG BASE 10 = LN(X)/LN(10)
- 10430 IF MAX < 1 THEN MAX = 1
- 10440 IF MAX > 6 THEN MAX = 6
- 10450 ON MAX GOTO 10460,10460,10530,10600,10670,10670
- 10460 '
- 10470 '** VALUES FROM 0.001 TO 9.999
- 10480 LOCATE 23,74 : PRINT USING "#.###";MAXVAL;
- 10490 LOCATE 23,56 : PRINT USING "#.###";(MAXVAL - (MAXVAL - MINVAL) * 0.25);
- 10500 LOCATE 23,39 : PRINT USING "#.###";(MAXVAL - (MAXVAL - MINVAL) * 0.5);
- 10510 LOCATE 23,21 : PRINT USING "#.###";(MAXVAL - (MAXVAL - MINVAL) * 0.75);
- 10520 LOCATE 23,4 : PRINT USING "#.###";MINVAL; : GOTO 10740
- 10530 '
- 10540 '** VALUES FROM 10.00 TO 99.99
- 10550 LOCATE 23,74 : PRINT USING "##.##";MAXVAL;
- 10560 LOCATE 23,56 : PRINT USING "##.##";(MAXVAL - (MAXVAL - MINVAL) * 0.25);
- 10570 LOCATE 23,39 : PRINT USING "##.##";(MAXVAL - (MAXVAL - MINVAL) * 0.5);
- 10580 LOCATE 23,21 : PRINT USING "##.##";(MAXVAL - (MAXVAL - MINVAL) * 0.75);
- 10590 LOCATE 23,4 : PRINT USING "##.##";MINVAL; : GOTO 10740
- 10600 '
- 10610 '** VALUES FROM 100.0 TO 999.9
- 10620 LOCATE 23,74 : PRINT USING "###.#";MAXVAL;
- 10630 LOCATE 23,56 : PRINT USING "###.#";(MAXVAL - (MAXVAL - MINVAL) * 0.25);
- 10640 LOCATE 23,39 : PRINT USING "###.#";(MAXVAL - (MAXVAL - MINVAL) * 0.5);
- 10650 LOCATE 23,21 : PRINT USING "###.#";(MAXVAL - (MAXVAL - MINVAL) * 0.75);
- 10660 LOCATE 23,4 : PRINT USING "###.#";MINVAL; : GOTO 10740
- 10670 '
- 10680 '** VALUES FROM 1000 TO 99999
- 10690 LOCATE 23,74 : PRINT USING "#####";MAXVAL;
- 10700 LOCATE 23,56 : PRINT USING "#####";(MAXVAL - (MAXVAL - MINVAL) * 0.25);
- 10710 LOCATE 23,39 : PRINT USING "#####";(MAXVAL - (MAXVAL - MINVAL) * 0.5);
- 10720 LOCATE 23,21 : PRINT USING "#####";(MAXVAL - (MAXVAL - MINVAL) * 0.75);
- 10730 LOCATE 23,4 : PRINT USING "#####";MINVAL; : GOTO 10740
- 10740 '
- 10750 LOCATE 25,1 : INPUT A$ : RETURN
- 10760 '
- 10770 '** DRAW THE HORIZONTAL BARS
- 10780 '
- 10790 BAR = DATAPOINTS
- 10800 IF BAR > 20 THEN BAR = 20
- 10810 ON BAR GOTO 10840,10840,10840,10970,11110,11240,11240,11370,11370,11370
- 10820 '** IF HERE THEN 11 > BAR > 21
- 10830 GOTO 11500
- 10840 '
- 10850 '** DRAWS BARS FOR 1 TO 3 ELEMENTS
- 10860 '
- 10870 SCALEFACTOR = (MAXVAL - MINVAL) / 564
- 10880 FOR X = 1 TO BAR
- 10890 LOCATE 2+X*6,3 : PRINT USING "\ \";DATALABEL$(X);
- 10900 BAR = (DATAVAL(X)-MINVAL)/SCALEFACTOR
- 10910 IF BAR < 0 THEN BAR = 0
- 10920 FOR Y = (8 + X*48) TO (14 + X*48)
- 10930 LINE (72,Y)-(72+BAR,Y)
- 10940 NEXT Y
- 10950 NEXT X
- 10960 RETURN
- 10970 '
- 10980 '** DRAWS BARS FOR 4 ELEMENTS
- 10990 '
- 11000 SCALEFACTOR = (MAXVAL - MINVAL) / 564
- 11010 FOR X = 1 TO BAR
- 11020 LOCATE 1+X*5,3 : PRINT USING "\ \";DATALABEL$(X);
- 11030 BAR = (DATAVAL(X)-MINVAL)/SCALEFACTOR
- 11040 IF BAR < 0 THEN BAR = 0
- 11050 FOR Y = (X*40) TO (6 + X*40)
- 11060 LINE (72,Y)-(72+BAR,Y)
- 11070 BAR = (DATAVAL(X)-MINVAL)/SCALEFACTOR
- 11080 NEXT Y
- 11090 NEXT X
- 11100 RETURN
- 11110 '
- 11120 '** DRAWS BARS FOR 5 ELEMENTS
- 11130 '
- 11140 SCALEFACTOR = (MAXVAL - MINVAL) / 564
- 11150 FOR X = 1 TO BAR
- 11160 LOCATE 5+X*3,3 : PRINT USING "\ \";DATALABEL$(X);
- 11170 BAR = (DATAVAL(X)-MINVAL)/SCALEFACTOR
- 11180 IF BAR < 0 THEN BAR = 0
- 11190 FOR Y = (32 + X*24) TO (38 + X*24)
- 11200 LINE (72,Y)-(72+BAR,Y)
- 11210 NEXT Y
- 11220 NEXT X
- 11230 RETURN
- 11240 '
- 11250 '** DRAWS BARS FOR 6 THRU 7 ELEMENTS
- 11260 '
- 11270 SCALEFACTOR = (MAXVAL - MINVAL) / 564
- 11280 FOR X = 1 TO BAR
- 11290 LOCATE X*3,3 : PRINT USING "\ \";DATALABEL$(X);
- 11300 BAR = (DATAVAL(X)-MINVAL)/SCALEFACTOR
- 11310 IF BAR < 0 THEN BAR = 0
- 11320 FOR Y = (-8 + X*24) TO (-2 + X*24)
- 11330 LINE (72,Y)-(72+BAR,Y)
- 11340 NEXT Y
- 11350 NEXT X
- 11360 RETURN
- 11370 '
- 11380 '** DRAWS BARS FOR 8 THRU 10 ELEMENTS
- 11390 '
- 11400 SCALEFACTOR = (MAXVAL - MINVAL) / 564
- 11410 FOR X = 1 TO BAR
- 11420 LOCATE 2+X*2,3 : PRINT USING "\ \";DATALABEL$(X);
- 11430 BAR = (DATAVAL(X)-MINVAL)/SCALEFACTOR
- 11440 IF BAR < 0 THEN BAR = 0
- 11450 FOR Y = (8 + X*16) TO (14 + X*16)
- 11460 LINE (72,Y)-(72+BAR,Y)
- 11470 NEXT Y
- 11480 NEXT X
- 11490 RETURN
- 11500 '
- 11510 '** DRAWS BARS FOR 11 THRU 20 ELEMENTS
- 11520 '
- 11530 SCALEFACTOR = (MAXVAL - MINVAL) / 564
- 11540 FOR X = 1 TO BAR : W = 20 - DATAPOINTS
- 11550 LOCATE 2+X+W,3 : PRINT USING "\ \";DATALABEL$(X);
- 11560 BAR = (DATAVAL(X)-MINVAL)/SCALEFACTOR
- 11570 IF BAR < 0 THEN BAR = 0
- 11580 FOR Y = (8 + X*8 + W*8) TO (14 + X*8 + W*8)
- 11590 LINE (72,Y)-(72+BAR,Y)
- 11600 NEXT Y
- 11610 NEXT X
- 11620 RETURN
- 12000 '
- 12010 '**********************************************************************
- 12020 '** This Section Draws A Circle Graph **
- 12030 '**********************************************************************
- 12040 '
- 12050 KEY OFF : SCREEN 2 : CLS : GRAPHTYPE = 4
- 12060 '
- 12070 '** Draw A Circle
- 12080 FOR X = -100 TO 100
- 12090 Y = (10000 - X*X)^0.5 * 0.5
- 12100 PSET (319+X,100+Y)
- 12110 PSET (319+X,100-Y)
- 12120 NEXT X
- 12130 FOR Y = -37 TO 37
- 12140 X = (2500 - Y*Y)^0.5 * 2
- 12150 PSET (319+X,100+Y)
- 12160 PSET (319-X,100+Y)
- 12170 NEXT
- 12180 '
- 12190 '** Find The Sum Of The Input Datapoints
- 12200 SUM = 0
- 12210 LASTPOINT = DATAPOINTS : IF LASTPOINT > 20 THEN LASTPOINT = 20
- 12220 FOR X = 1 TO LASTPOINT
- 12230 SUM = SUM + DATAVAL(X)
- 12240 NEXT X
- 12250 '
- 12260 '** Define A Couple Of Values
- 12270 PERCENT = 3.14159 * 2
- 12280 SCALEVALUE = PERCENT/SUM
- 12290 '
- 12300 '
- 12310 '** Draw The Pie Lines
- 12320 LINEVALUE = 0 : LINE (319,100)-(419,100)
- 12330 FOR Z = 1 TO DATAPOINTS
- 12340 LINEVALUE = LINEVALUE + DATAVAL(Z)
- 12350 X = COS (LINEVALUE * SCALEVALUE) * 100
- 12360 Y = SIN (LINEVALUE * SCALEVALUE) * 50
- 12370 LINE (319,100)-(319+X,100-Y)
- 12380 NEXT Z
- 12390 '
- 12400 '** Draw The Marker Lines And Labels
- 12410 LINEVALUE = 0
- 12420 FOR Z = 1 TO DATAPOINTS
- 12430 LINEVALUE = LINEVALUE + DATAVAL(Z)/2
- 12440 X = COS (LINEVALUE * SCALEVALUE) * 100
- 12450 Y = SIN (LINEVALUE * SCALEVALUE) * 50
- 12460 X2 = COS (LINEVALUE * SCALEVALUE) * 110
- 12470 Y2 = SIN (LINEVALUE * SCALEVALUE) * 55
- 12480 X1 = COS (LINEVALUE * SCALEVALUE) * 160
- 12490 Y1 = SIN (LINEVALUE * SCALEVALUE) * 80
- 12500 LINE (319+X2,100-Y2)-(319+X1,100-Y1)
- 12510 IF X1 >= 0 THEN 12520 ELSE 12540
- 12520 LINE (319+X1,100-Y1)-(519,100-Y1)
- 12530 LOCATE (104-Y1)/8,68 : PRINT USING "\ \";DATALABEL$(Z);:PRINT USING "###.#";DATAVAL(Z)/SUM*100;: PRINT "%"; : GOTO 12560
- 12540 LINE (319+X1,100-Y1)-(119,100-Y1)
- 12550 LOCATE (104-Y1)/8,2 : PRINT USING "\ \";DATALABEL$(Z);:PRINT USING "###.#";DATAVAL(Z)/SUM*100;: PRINT "%"; : GOTO 12560
- 12560 '
- 12570 LINEVALUE = LINEVALUE + DATAVAL(Z)/2
- 12580 NEXT Z
- 12590 LOCATE 1,20+(40-LEN(ATITLE1))/2 : PRINT ATITLE1;
- 12600 LOCATE 2,20+(40-LEN(ATITLE2))/2 : PRINT ATITLE2;
- 12610 LOCATE 25,1 :INPUT A$
- 12620 RETURN
- 15000 '
- 15010 '**********************************************************************
- 15020 '** This Section Has Common Parts For Different Graph Types **
- 15030 '**********************************************************************
- 15040 '
- 15050 LINE (63,0)-(63,185) : LINE (48,175)-(639,175)
- 15060 LOCATE 1,25+(40-LEN(ATITLE1))/2 : PRINT ATITLE1;
- 15070 LOCATE 2,25+(40-LEN(ATITLE2))/2 : PRINT ATITLE2;
- 15080 LOCATE 25,25+(40-LEN(ATITLE3))/2 : PRINT ATITLE3;
- 15090 '
- 15100 '** FOR THE VERTICAL AXIS, CENTER THE LABEL WITHIN 18 CHAR OF BLANKS
- 15110 A$ = "" : L = LEN(ATITLE4) : L1 = (18-L)/2
- 15120 FOR X = 1 TO L1 : A$ = A$ + " " : NEXT X
- 15130 A$ = A$ + ATITLE4
- 15140 FOR X = LEN(A$) TO 18 : A$ = A$ + " " : NEXT X
- 15150 '
- 15160 '** NOW PRINT THE LABEL ON THE LEFT OF THE SCREEN
- 15170 FOR X = 3 TO 20
- 15180 LOCATE X,1 : PRINT MID$(A$,X-2,1);
- 15190 NEXT X
- 15200 '
- 15210 '** CALCULATE OUT HOW TO PRINT THE VERTICAL SCALE AND PRINT IT
- 15220 '**
- 15230 '** IF MAXVAL >= 10000 THEN PRINT AS XXXXX
- 15240 '** IF 1000 >= MAXVAL > 10000 THEN PRINT AS XXXX
- 15250 '** IF 100 >= MAXVAL > 1000 THEN PRINT AS XXX.X
- 15260 '** IF 10 >= MAXVAL > 100 THEN PRINT AS XX.XX
- 15270 '** IF 1 >= MAXVAL > 10 THEN PRINT AS X.XXX
- 15280 '** IF 0 >= MAXVAL > 1 THEN PRINT AS 0.XXX
- 15290 '**
- 15300 MAX = 2 + LOG(MAXVAL)/LOG(10) ' LOG BASE 10 = LN(X)/LN(10)
- 15310 IF MAX < 1 THEN MAX = 1
- 15320 IF MAX > 6 THEN MAX = 6
- 15330 ON MAX GOTO 15340,15340,15410,15480,15550,15550
- 15340 '
- 15350 '** VALUES FROM 0.001 TO 9.999
- 15360 LOCATE 3,3 : PRINT USING "#.###";MAXVAL;
- 15370 LOCATE 8,3 : PRINT USING "#.###";(MAXVAL - (MAXVAL - MINVAL) * 0.25);
- 15380 LOCATE 13,3 : PRINT USING "#.###";(MAXVAL - (MAXVAL - MINVAL) * 0.5);
- 15390 LOCATE 18,3 : PRINT USING "#.###";(MAXVAL - (MAXVAL - MINVAL) * 0.75);
- 15400 LOCATE 23,3 : PRINT USING "#.###";MINVAL; : GOTO 15620
- 15410 '
- 15420 '** VALUES FROM 10.00 TO 99.99
- 15430 LOCATE 3,3 : PRINT USING "##.##";MAXVAL;
- 15440 LOCATE 8,3 : PRINT USING "##.##";(MAXVAL - (MAXVAL - MINVAL) * 0.25);
- 15450 LOCATE 13,3 : PRINT USING "##.##";(MAXVAL - (MAXVAL - MINVAL) * 0.5);
- 15460 LOCATE 18,3 : PRINT USING "##.##";(MAXVAL - (MAXVAL - MINVAL) * 0.75);
- 15470 LOCATE 23,3 : PRINT USING "##.##";MINVAL; : GOTO 15620
- 15480 '
- 15490 '** VALUES FROM 100.0 TO 999.9
- 15500 LOCATE 3,3 : PRINT USING "###.#";MAXVAL;
- 15510 LOCATE 8,3 : PRINT USING "###.#";(MAXVAL - (MAXVAL - MINVAL) * 0.25);
- 15520 LOCATE 13,3 : PRINT USING "###.#";(MAXVAL - (MAXVAL - MINVAL) * 0.5);
- 15530 LOCATE 18,3 : PRINT USING "###.#";(MAXVAL - (MAXVAL - MINVAL) * 0.75);
- 15540 LOCATE 23,3 : PRINT USING "###.#";MINVAL; : GOTO 15620
- 15550 '
- 15560 '** VALUES FROM 1000 TO 99999
- 15570 LOCATE 3,3 : PRINT USING "#####";MAXVAL;
- 15580 LOCATE 8,3 : PRINT USING "#####";(MAXVAL - (MAXVAL - MINVAL) * 0.25);
- 15590 LOCATE 13,3 : PRINT USING "#####";(MAXVAL - (MAXVAL - MINVAL) * 0.5);
- 15600 LOCATE 18,3 : PRINT USING "#####";(MAXVAL - (MAXVAL - MINVAL) * 0.75);
- 15610 LOCATE 23,3 : PRINT USING "#####";MINVAL; : GOTO 15620
- 15620 '
- 15630 '** PRINT DASHES ON VERTICAL AXIS
- 15640 '
- 15650 LINE (56,15)-(63,15)
- 15660 LINE (56,55)-(63,55)
- 15670 LINE (56,95)-(63,95)
- 15680 LINE (56,135)-(63,135)
- 15690 '
- 15700 RETURN
- 30000 '
- 30010 '********************************************************************
- 30020 '** Data-In Subroutine **
- 30030 '********************************************************************
- 30040 'ROW = 20 : COLUMN = 20 : LENGTH = 20 ** USE THIS AS AN EXAMPLE **
- 30050 'GOSUB 30080 ** ON HOW TO ACCESS THIS **
- 30060 'PRINT B$ ** SUBROUTINE **
- 30070 '********************************************************************
- 30080 B$ = ""
- 30090 FOR X = 1 TO LENGTH
- 30100 B$ = B$ + "-"
- 30110 NEXT X
- 30120 LOCATE ROW,COLUMN
- 30130 PRINT B$;
- 30140 '
- 30150 POINTER = 1 : A$ = " "
- 30160 WHILE (ASC(A$) <> 13)
- 30170 A$ = INPUT$(1)
- 30180 IF (POINTER > LENGTH) AND (ASC(A$) = 13) THEN 30300
- 30190 IF (POINTER > LENGTH) AND (ASC(A$) = 8) THEN 30250
- 30200 IF (POINTER > LENGTH) THEN 30300
- 30210 IF (ASC(A$) >= 32) THEN MID$(B$,POINTER,1) = A$ : POINTER = POINTER + 1 : GOTO 30280
- 30220 IF (POINTER = 1) AND (ASC(A$) = 8) GOTO 30280
- 30230 IF (ASC(A$) <> 8) THEN 30270
- 30240 MID$(B$,POINTER,1) = "-"
- 30250 MID$(B$,POINTER-1,1) = "-"
- 30260 POINTER = POINTER -1
- 30270 IF (ASC(A$) = 13) THEN B$ = MID$(B$,1,POINTER-1) : POINTER = LENGTH + 1
- 30280 LOCATE ROW,COLUMN
- 30290 PRINT B$;
- 30300 WEND
- 30310 RETURN
-